The present invention relates generally to electronic devices, and, more particularly, to booting an electronic device using a NAND flash memory.
Electronic devices often use flash memories for storing code and data, including that required for booting the electronic device (also referred to as a pre-boot code). NAND flash memories are non-volatile, inexpensive, and facilitate efficient read/write operations, and therefore, are preferred to store the pre-boot code in electronic devices. A NAND flash memory includes multiple memory blocks and each memory block includes multiple pages. A NAND flash controller fetches the pre-boot code from the NAND flash memory and provides the pre-boot code to a processor of the electronic device and the processor initiates the boot process upon receiving the pre-boot code.
Currently, there is no universally accepted standard for NAND flash memories. That is, different vendors manufacture NAND flash memories having different specifications. For example, NAND flash memories may have different boot frequencies, and different sizes of memory blocks and pages. A single NAND flash controller may be connected to several NAND flash memories, each having different specifications, which makes it difficult for the controller to choose an optimum boot frequency for fetching the pre-boot code. In such a case, the controller fetches the pre-boot code at the frequency of the NAND flash memory having the lowest booting frequency. Thus, the controller is forced to operate at the lowest booting frequency even when it is accessing NAND flash memories with higher booting frequencies, which considerably slows the boot process.
When the electronic device is powered on or reset, a trigger is sent to the NAND flash controller to fetch the pre-boot code and a reset configuration word (RCW) load prompt or a boot load prompt is triggered. The RCW load prompt requires the entire pre-boot code to be fetched. However, the RCW load prompt requires only a portion of the pre-boot code to be fetched. Existing NAND flash controllers fail to identify the type of trigger and fetch the entire pre-boot code for both the RCW and boot load prompts, thereby making the boot process inefficient.
A NAND flash memory block may be a good or a bad memory block. A good memory block stores the pre-boot code and a bad memory block is a corrupted block. Each memory block has a bad block indicator (BBI) that indicates whether the memory block is good or bad. The BBI is located in the first, second, or last page of the memory block. Existing NAND flash controllers either fetch the pre-boot code from a fixed, predetermined location of the NAND flash memory or search for a first good memory block in which the pre-boot code is stored by checking only the first two pages of a memory block, which makes the good memory block search inefficient.
It would be advantageous to have a system for booting an electronic device from a NAND flash memory that offers flexibility to operate at different boot frequencies and efficiently search good memory blocks, and that overcomes the above mentioned limitations of existing boot systems.